tooltips: Fix a line wrap mishap
authorMatthias Clasen <mclasen@redhat.com>
Wed, 27 May 2020 23:00:18 +0000 (19:00 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 27 May 2020 23:01:46 +0000 (19:01 -0400)
We don't want wrapping labels to cause tooltips to
have excessive height, so we need to set a reasonable
value for width-chars, without forcing short tooltips
into a full line length. Also be careful to respect
preexisting line breaks (we have such examples in
widget factory).

gtk/gtktooltipwindow.c
gtk/ui/gtktooltipwindow.ui

index 432f2aef8e32dee21e7e63f2e526210c533f709b..c30ebf1616ef7e6b3b4fb64cb8b770eb1828d7d0 100644 (file)
@@ -404,6 +404,28 @@ gtk_tooltip_window_new (void)
   return g_object_new (GTK_TYPE_TOOLTIP_WINDOW, NULL);
 }
 
+static void
+update_label_width (GtkLabel *label)
+{
+  const char *text;
+
+  text = gtk_label_get_text (label);
+  if (strchr (text, '\n'))
+    {
+      gtk_label_set_wrap (label, FALSE);
+    }
+  else
+    {
+      int len;
+
+      len = g_utf8_strlen (text, -1);
+
+      gtk_label_set_width_chars (label, MIN (len, 50));
+      gtk_label_set_max_width_chars (label, MIN (len, 50));
+      gtk_label_set_wrap (label, TRUE);
+    }
+}
+
 void
 gtk_tooltip_window_set_label_markup (GtkTooltipWindow *window,
                                      const char       *markup)
@@ -411,6 +433,7 @@ gtk_tooltip_window_set_label_markup (GtkTooltipWindow *window,
   if (markup != NULL)
     {
       gtk_label_set_markup (GTK_LABEL (window->label), markup);
+      update_label_width (GTK_LABEL (window->label));
       gtk_widget_show (window->label);
     }
   else
@@ -426,6 +449,7 @@ gtk_tooltip_window_set_label_text (GtkTooltipWindow *window,
   if (text != NULL)
     {
       gtk_label_set_text (GTK_LABEL (window->label), text);
+      update_label_width (GTK_LABEL (window->label));
       gtk_widget_show (window->label);
     }
   else
index 59bd028d893c73c0cfadc1d508550b80ae1d0975..fd2e7b7fd3cde55fabf6aa11e5acd7303bb6971b 100644 (file)
@@ -19,7 +19,6 @@
         <child>
           <object class="GtkLabel" id="label">
             <property name="wrap">1</property>
-            <property name="max-width-chars">70</property>
           </object>
         </child>
       </object>